//
//  NSAttributedString.Key.swift
//  Documentation
//
//  Created by Toj on 3/5/24.
//

import UIKit

extension NSAttributedString.Key {

    /************************ Attributes ************************/
    @available(iOS 6.0, *)
    /// 设置字体属性, 取值为 UIFont对象, 默认值: [字体: Helvetica(Neue); 字号: 12]
    public static let font: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置文本段落排版格式, 取值为 NSParagraphStyle 对象
    public static let paragraphStyle: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置字体颜色, 取值为 UIColor对象, 默认值为黑色
    public static let foregroundColor: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置字体所在区域背景颜色, 取值为 UIColor对象, 默认值为nil, 透明色
    public static let backgroundColor: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置连体属性, 取值为NSNumber 对象(整数),
    /// 0: 表示没有连体字符
    /// 1: 表示使用默认的连体字符
    public static let ligature: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设定字符间距, 取值为 NSNumber 对象(整数), 正值间距加宽, 负值间距变窄
    public static let kern: NSAttributedString.Key

    @available(iOS 14.0, *)
    /// NSNumber包含浮点值，以points为单位; 修改默认跟踪的数量。0表示禁用跟踪。
    public static let tracking: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置删除线, 取值为 NSNumber 对象(整数)
    public static let strikethroughStyle: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置下划线, 取值为 NSNumber 对象(整数), 枚举常量 NSUnderlineStyle中的值, 与删除线类似
    public static let underlineStyle: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置填充部分颜色, 不是字体颜色, 取值为 UIColor 对象
    public static let strokeColor: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置笔画宽度, 取值为 NSNumber 对象(整数), 负值填充效果, 正值中空效果
    public static let strokeWidth: NSAttributedString.Key

    @available(iOS 6.0, *)
    /// 设置阴影属性, 取值为 NSShadow 对象
    public static let shadow: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置文本特殊效果, 取值为 NSString 对象, 目前只有图版印刷效果可用.
    public static let textEffect: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置文本附件, 取值为NSTextAttachment对象, 常用于文字图片混排
    public static let attachment: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置链接属性, 点击后调用浏览器打开指定URL地址
    public static let link: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置基线偏移值, 取值为 NSNumber (float), 正值上偏, 负值下偏
    public static let baselineOffset: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置下划线颜色, 取值为 UIColor 对象, 默认值为黑色
    public static let underlineColor: NSAttributedString.Key

    @available(iOS 7.0, *)
    // 设置删除线颜色, 取值为 UIColor 对象, 默认值为黑色
    public static let strikethroughColor: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置字形倾斜度, 取值为 NSNumber (float), 正值右倾, 负值左倾
    public static let obliqueness: NSAttributedString.Key

    @available(iOS 7.0, *)
    /// 设置文本横向拉伸属性, 取值为 NSNumber (float),正值横向拉伸文本, 负值横向压缩文本
    public static let expansion: NSAttributedString.Key

    
    @available(iOS 7.0, *)
    /// 设置文字书写方向, 从左向右书写或者从右向左书写
    public static let writingDirection: NSAttributedString.Key //  NSWritingDirectionFormatType values.  LRE: NSWritingDirectionLeftToRight|NSWritingDirectionEmbedding, RLE: NSWritingDirectionRightToLeft|NSWritingDirectionEmbedding, LRO: NSWritingDirectionLeftToRight|NSWritingDirectionOverride, RLO: NSWritingDirectionRightToLeft|NSWritingDirectionOverride,

    
    @available(iOS 6.0, *)
    /// 设置文字排版方向, 取值为 NSNumber 对象(整数), 0 表示横排文本, 1 表示竖排文本
    public static let verticalGlyphForm: NSAttributedString.Key
}

extension NSAttributedString {

    // Methods initializing the receiver contents with an external document data.  options specify document attributes for interpreting the document contents.  NSDocumentTypeDocumentAttribute, NSCharacterEncodingDocumentAttribute, and NSDefaultAttributesDocumentAttribute are supported options key.  When they are not specified, these methods will examine the data and do their best to detect the appropriate attributes.  If dict is non-NULL, it will return a dictionary with various document-wide attributes accessible via NS...DocumentAttribute keys.
    @available(iOS 9.0, *)
    public init(url: URL, options: [NSAttributedString.DocumentReadingOptionKey : Any] = [:], documentAttributes dict: AutoreleasingUnsafeMutablePointer<NSDictionary?>?) throws

    @available(iOS 7.0, *)
    public init(data: Data, options: [NSAttributedString.DocumentReadingOptionKey : Any] = [:], documentAttributes dict: AutoreleasingUnsafeMutablePointer<NSDictionary?>?) throws

    
    // Generates an NSData object for the receiver contents in range.  It requires a document attributes dict specifying at least the NSDocumentTypeDocumentAttribute to determine the format to be written.
    @available(iOS 7.0, *)
    open func data(from range: NSRange, documentAttributes dict: [NSAttributedString.DocumentAttributeKey : Any] = [:]) throws -> Data

    
    // Returns an NSFileWrapper object for the receiver contents in range.  It requires a document attributes dict specifying at least the NSDocumentTypeDocumentAttribute to determine the format to be written.  The method returns a directory file wrapper for those document types represented by a file package such as NSRTFDTextDocumentType; otherwise, it returns a regular-file file wrapper.
    @available(iOS 7.0, *)
    open func fileWrapper(from range: NSRange, documentAttributes dict: [NSAttributedString.DocumentAttributeKey : Any] = [:]) throws -> FileWrapper
}
